package gradle.common.core.response;

import gradle.common.core.enums.ResultCodeEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 通用服务间返回实体
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class ServerResponse<T> extends BaseResponse {

    /**
     * 返回数据
     */
    private T data;

    /**
     * 私有无参构造器，防止new
     */
    private ServerResponse() {
    }

    /**
     * 请求成功返回（不带分页参数）
     *
     * @param data 返回实体
     * @param <T>  返回实体类型
     * @return api返回对象
     */
    public static <T> ServerResponse<T> success(T data) {
        ServerResponse<T> apiResponse = new ServerResponse<>();
        apiResponse.setStatus(ResultCodeEnum.SUCCESS.getCode());
        apiResponse.setData(data);
        return apiResponse;
    }

    /**
     * 请求失败
     *
     * @param message 异常信息
     * @return 响应实体
     */
    public static <T> ServerResponse<T> error(String message) {
        ServerResponse<T> apiResponse = new ServerResponse<>();
        apiResponse.setStatus(ResultCodeEnum.BUSINESS_ERROR.getCode());
        apiResponse.setMessage(message);
        return apiResponse;
    }


    /**
     * 请求失败
     *
     * @param resultCodeEnum 状态码枚举
     * @param <T>            泛型
     * @return ServerResponse
     */
    public static <T> ServerResponse<T> error(ResultCodeEnum resultCodeEnum) {
        ServerResponse<T> serverResponse = new ServerResponse<>();
        serverResponse.setStatus(resultCodeEnum.getCode());
        serverResponse.setMessage(resultCodeEnum.getMessage());
        return serverResponse;
    }


    /**
     * 请求失败
     *
     * @param status  状态码
     * @param message 提示信息
     * @param <T>     泛型
     * @return ServerResponse
     */
    public static <T> ServerResponse<T> error(int status, String message) {
        ServerResponse<T> serverResponse = new ServerResponse<>();
        serverResponse.setStatus(status);
        serverResponse.setMessage(message);
        return serverResponse;
    }

}
